완주하지 못한 선수
📔 문제 설명
수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.
마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.
📓 제약 조건
마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다.
completion의 길이는 participant의 길이보다 1 작습니다.
참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다.
참가자 중에는 동명이인이 있을 수 있습니다.
📓 입출력의 예
participant | completion | return |
---|---|---|
["leo", "kiki", "eden"] | ["eden", "kiki"] | "leo" |
["marina", "josipa", "nikola", "vinko", "filipa"] | ["josipa", "filipa", "marina", "nikola"] | "vinko" |
["mislav", "stanko", "mislav", "ana"] | ["stanko", "ana", "mislav"] | "mislav" |
❗ 1번째
먼저 참가자 배열을 반복문돌려서 오브젝트의 키값에 참가자를 넣고 그 이름으로 참여한 수를 오브젝트안에 넣어준다
그다음 완주자 이름 배열을 반복문 돌려서 오브젝트 값에 빼준다.
다음 오브젝트의 in연산자를 활용하여 밖으로 빼내어 주면될거같다.
✅ 실행 코드
function solution(participant, completion) {
const obj = {}
for (p of participant) {
if (obj[p] > 1) {
obj[p]++
} else {
obj[p] = 1
}
}
for (c of completion) {
obj[c]--
}
for (const 탈락자 in obj) {
return 탈락자
}
}
❗ 2번째
문제는 2가지가있었다 첫번째로는 오브젝트에 완주자의 값을 빼도 사라지는게 아니라 0이 되는걸 생각 못했다 그래서 간단하게 비어있지않고 있을때만 리턴해주게 조건문을 추가했고 if(obj[p])값도 >1로 이상하게 표기 되어있었다 수정해주니 정상적으로 돌아간다.
✅ 실행 코드
function solution(participant, completion) {
const obj = {}
for (p of participant) {
if (obj[p]) {
obj[p]++
} else {
obj[p] = 1
}
}
for (c of completion) {
obj[c]--
}
for (const 탈락자 in obj) {
if(obj[탈락자]){
return 탈락자
}
}
}
📚 문제 느낀점
정석적인 해시문제인거같다 자바스크립트의 객체를 활용하는 문제이니만큼 자바스크립트의 객체 메소드를 조금 숙지해두는게 좋을거같다.
© 문제 출처
https://school.programmers.co.kr/learn/courses/30/lessons/42576?language=javascript